共计 2048 个字符,预计需要花费 6 分钟才能阅读完成。
AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
前言
最近在学习 SpringBoot,在学习了 SpringBoot 之后的感觉就是给人全新的感觉,整个项目都几乎不怎么使用配置文件,全部通过注解来进行配置,再结合 Maven,开发效率有大大的提升。
正文
在写 AOP 之前,首先要先引入 AOP 的依赖,在项目的 pom.xml 中加入如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
通过 AOP 来获取 HTTP 请求头的信息以及参数,从而可以对访问请求进行验证。
public class HttpAspect {private final static Logger LOGGER = LoggerFactory.getLogger(HttpAspect.class);
@Pointcut(value = "execution(public * com.boy.controller.BoyController.*(..))")
public void p(){}
@Before("p()")
public void doBefore(JoinPoint joinPoint){ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//URL
LOGGER.warn("URL={}",request.getRequestURL());
//Method
LOGGER.warn("Method={}",request.getMethod());
//IP
LOGGER.warn("IP={}",request.getRemoteAddr());
//Class.Method
LOGGER.warn("CLass.Method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()+"()");
//Args
LOGGER.warn("Args={}",joinPoint.getArgs());
//... 其余操作
}
@After("p()")
public void doAfter(){LOGGER.warn("HttpAspect doAfter Running :"+new Date().getTime());
}
}
由上述代码可以得到 HTTP 请求的信息,这样可以根据业务需要来进行对请求的验证或审核。运行结果如下:
2017-05-05 10:49:30.891 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : URL=http://localhost:8080/boys/3
2017-05-05 10:49:30.891 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : Method=GET
2017-05-05 10:49:30.891 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : IP=0:0:0:0:0:0:0:1
2017-05-05 10:49:30.893 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : CLass.Method=com.boy.controller.BoyController.getBoy()
2017-05-05 10:49:30.893 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : Args=3
2017-05-05 10:49:30.968 WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect : HttpAspect doAfter Running : 1493952570968
正文完
使用官方微信小程序体验更多功能